home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Moscow ML 1.31 / source code / mosml / src / mosmllib / test / bytecmac.sml < prev    next >
Encoding:
Text File  |  1995-09-15  |  6.2 KB  |  172 lines  |  [TEXT/Moml]

  1. (* test/bytechar.sml -- test cases for Byte and Char, suitable for ASCII
  2.    PS 1994-12-10, 1995-05-11 *)
  3.  
  4. (* Mac: changed \^M to \^J in three places *)
  5.  
  6. use "auxil.sml";
  7.  
  8. local 
  9.  
  10. in 
  11. val test1 = checkrange (0,255) 
  12.     (fn i => (Word8.wordToInt o Byte.ord o Byte.chr
  13.                   o Word8.intToWord) i = i);
  14.  
  15. val test2 = checkrange (0,Char.maxOrd) 
  16.     (fn i => (Word8.wordToInt o Byte.ord o Char.chr) i = i);
  17.  
  18. val test3 = checkrange (0,255) 
  19.     (fn i => (Char.ord o Byte.chr o Word8.intToWord) i = i);
  20.  
  21. val test4 = checkrange (0, Char.maxOrd) 
  22.     (fn i => (Char.ord o Char.chr) i = i);
  23.  
  24. val test5 = (Char.chr ~1 seq "WRONG") handle Char.Chr => "OK" | _ => "WRONG";
  25.  
  26. val test6 = (Char.chr (Char.maxOrd+1) seq "WRONG") 
  27.             handle Char.Chr => "OK" | _ => "WRONG";
  28.         
  29. val test7 = check("" = Byte.string (Word8Vector.fromList []));
  30.  
  31. val test8 = 
  32.     check("ABDC" = (Byte.string o Word8Vector.fromList o map Word8.intToWord)
  33.                    [65, 66, 68, 67]);
  34.  
  35. val test9 = check("" = Byte.extract(Word8Array.fromList [], 0, SOME 0));
  36.  
  37. local 
  38.     val arr = Word8Array.tabulate(10, fn i => Word8.intToWord(i+65))
  39. in
  40. val test10a = check("" = Byte.extract(arr, 0, SOME 0));
  41. val test10b = check("" = Byte.extract(arr, 10, SOME 0) 
  42.                    andalso "" = Byte.extract(arr, 10, NONE));
  43. val test10c = check("BCDE" = Byte.extract(arr, 1, SOME 4));
  44. val test10d = (Byte.extract(arr, ~1, SOME 0) seq "WRONG")
  45.               handle Subscript => "OK" | _ => "WRONG";
  46. val test10e = (Byte.extract(arr, 11, SOME 0) seq "WRONG")
  47.               handle Subscript => "OK" | _ => "WRONG";
  48. val test10f = (Byte.extract(arr, 0, SOME ~1) seq "WRONG")
  49.               handle Subscript => "OK" | _ => "WRONG";
  50. val test10g = (Byte.extract(arr, 0, SOME 11) seq "WRONG")
  51.               handle Subscript => "OK" | _ => "WRONG";
  52. val test10h = (Byte.extract(arr, 10, SOME 1) seq "WRONG")
  53.               handle Subscript => "OK" | _ => "WRONG";
  54. val test10i = (Byte.extract(arr, ~1, NONE) seq "WRONG")
  55.               handle Subscript => "OK" | _ => "WRONG";
  56. val test10j = (Byte.extract(arr, 11, NONE) seq "WRONG")
  57.               handle Subscript => "OK" | _ => "WRONG";
  58. end
  59.  
  60. val test18 = check(not (Char.contains "" (Char.chr 65))
  61.                    andalso not (Char.contains "aBCDE" (Char.chr 65))
  62.                    andalso (Char.contains "ABCD" (Char.chr 67))
  63.                    andalso not (Char.contains "" #"\000")
  64.                    andalso not (Char.contains "" #"\255")
  65.                    andalso not (Char.contains "azAZ09" #"\000")
  66.                    andalso not (Char.contains "azAZ09" #"\255"));
  67.  
  68. val test19 = check(Char.notContains "" (Char.chr 65)
  69.                    andalso Char.notContains "aBCDE" (Char.chr 65)
  70.                    andalso not (Char.notContains "ABCD" (Char.chr 67))
  71.                    andalso Char.notContains "" #"\000"
  72.                    andalso Char.notContains "" #"\255"
  73.                    andalso Char.notContains "azAZ09" #"\000"
  74.                    andalso Char.notContains "azAZ09" #"\255");
  75.  
  76. val test20 = check(Char.ord Char.maxChar = Char.maxOrd);
  77.  
  78. local 
  79. fun mycontains s c = 
  80.     let val stop = String.size s
  81.         fun h i = i < stop andalso (c = String.sub(s, i) orelse h(i+1))
  82.     in h 0 end;
  83.  
  84. (* Check that p(c) = (mycontains s c) for all characters: *)
  85. fun equivalent p s = 
  86.     let fun h n =
  87.         n > 255 orelse 
  88.         (p (chr n) = mycontains s (chr n)) andalso h(n+1)
  89.     in h 0 end
  90.  
  91. fun checkset p s = check'(fn _ => equivalent p s);
  92.  
  93. val graphchars = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\
  94.  \[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\
  95.  \\128\129\130\131\132\133\134\135\136\137\138\139\140\141\
  96.  \\142\143\144\145\146\147\148\149\150\151\152\153\154\155\156\
  97.  \\157\158\159\160\161\162\163\164\165\166\167\168\169\170\171\
  98.  \\172\173\174\175\176\177\178\179\180\181\182\183\184\185\186\
  99.  \\187\188\189\190\191\192\193\194\195\196\197\198\199\200\201\
  100.  \\202\203\204\205\206\207\208\209\210\211\212\213\214\215\216\
  101.  \\217\218\219\220\221\222\223\224\225\226\227\228\229\230\231\
  102.  \\232\233\234\235\236\237\238\239\240\241\242\243\244\245\246\
  103.  \\247\248\249\250\251\252\253\254";
  104.  
  105. val ascii = "\^@\^A\^B\^C\^D\^E\^F\^G\^H\t\^J\^K\^L\n\^N\^O\^P\
  106.  \\^Q\^R\^S\^T\^U\^V\^W\^X\^Y\^Z\^[\^\\^]\^^\^_\
  107.  \ !\"#$%&'()*+,-./0123456789:;<=>?@\
  108.  \ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127" 
  109.  
  110. val lowerascii = "\^@\^A\^B\^C\^D\^E\^F\^G\^H\t\^J\^K\^L\n\^N\^O\^P\
  111.  \\^Q\^R\^S\^T\^U\^V\^W\^X\^Y\^Z\^[\^\\^]\^^\^_\
  112.  \ !\"#$%&'()*+,-./0123456789:;<=>?@\
  113.  \abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\127" 
  114.  
  115. val upperascii = "\^@\^A\^B\^C\^D\^E\^F\^G\^H\t\^J\^K\^L\n\^N\^O\^P\
  116.  \\^Q\^R\^S\^T\^U\^V\^W\^X\^Y\^Z\^[\^\\^]\^^\^_\
  117.  \ !\"#$%&'()*+,-./0123456789:;<=>?@\
  118.  \ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\127" 
  119.  
  120. val allchars = 
  121.     let fun h 0 res = chr 0 :: res
  122.           | h n res = h (n-1) (chr n :: res)
  123.     in h 255 [] end
  124.  
  125. open Char
  126. in
  127.  
  128. val test21 = 
  129.     checkset isLower "abcdefghijklmnopqrstuvwxyz";
  130. val test22 = 
  131.     checkset isUpper "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  132. val test23 = 
  133.     checkset isDigit "0123456789";
  134. val test24 = 
  135.     checkset isAlpha "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  136. val test25 = 
  137.     checkset isHexDigit "0123456789abcdefABCDEF";
  138. val test26 = 
  139.     checkset isAlphaNum 
  140.        "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  141. val test27 = 
  142.     checkset isPrint (" " ^ graphchars)
  143. val test28 = 
  144.     checkset isSpace " \009\010\011\012\013";
  145. val test29 = 
  146.     checkset isGraph graphchars
  147. val test30 = 
  148.     checkset isAscii ascii
  149.  
  150. val test31 = 
  151.     check'(fn _ => map toLower (explode ascii) = explode lowerascii)
  152. val test32 = 
  153.     check'(fn _ => map toUpper (explode ascii) = explode upperascii)
  154. val test33 = 
  155.     check'(fn _ => 
  156.            map toUpper (explode graphchars)
  157.            seq map toLower (explode graphchars)
  158.            seq true)
  159.  
  160. val test34a =
  161.     check'(fn _ => 
  162.            map pred (List.drop(allchars, 1)) = List.take(allchars, 255));
  163. val test34b = (pred #"\000" seq "WRONG")
  164.               handle Chr => "OK" | _ => "WRONG";
  165. val test35a =
  166.     check'(fn _ => 
  167.            map succ (List.take(allchars, 255)) = List.drop(allchars, 1));
  168. val test35b = (succ #"\255" seq "WRONG")
  169.               handle Chr => "OK" | _ => "WRONG";
  170. end
  171. end
  172.